// 1.什么是类型断言?
// ts中的类型断言和其他编程语言的类型转换很像,可以将一种类型强制转换成另一种类型，
//只不过类型断言是不改变初始实际类型的情况下转化为其他类型,例如将any类型string数据转化为string类型的数据，而不能将any类型的number类型数据转化为string类型数据
// 类型断言就是告诉编译器,你不要再帮我查了, 相信我,我知道自己在干什么。


// 例如:我们拿到了一个any类型的变量,但是我们明确的知道这个变量中保存的是字符串类型
// 此时我们就可以通过类型断言告诉编译器,这个变量是一个字符串类型
// 此时我们就可以通过类型断言将any类型转换为string类型,才能使用字符串类型中的相关方法


// 举例
let str:any='it666';
//虽然我们知道str保存的是string类型的数据，但是依然使用不了string类的相关方法，
//因为编译器只知道是any类型，而any类型有很多种，这时只有使用类型断言才能告诉编译器该变量保存的是字符串类型

// 适用类型断言方式一
(<string>str).length//相当于其它语言中的类型转换,将any类型转化为string类型，只不过string类型属于any类型，所以可以理解为告诉编译器该变量保存的是属于any类型下的string类型，
console.log((<string>str).length)//打印结果为5,成功调用字符串的length方法

let num:number=123;
 //(<string>num).length//这里会直接报错因为无法转化

let strnum:any=123;
(<string>strnum).length//这里虽然不会报错,但是不能转化为string类型
console.log(typeof((<string>strnum)))//打印结果为number,转化不了string类型


//使用类型断言方式二
str as string //通过as来将str转化为string
console.log(typeof(str as string))//打印结果为string,成功转化为string类型

strnum as string
console.log(typeof(strnum as string))//打印结果为number,转化不了string类型

// 所以类型断言无法将初始实际类型转化为其他类型
// 在企业中推荐使用第二种as的方式进行类型断言,因为第一种方式有兼容性问题，在使用到了jsx的时候兼容性不是很好




